package reflection;

/**
 * 反射机制
 * -指的是可以运行时加载/探知/使用 编译期间完全未知的类.
 * -程序在运行状态中,可以动态加载一个只有名称的类,对于任意一个已加载的类,
 *  都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意
 *  一个方法和属性
 * -加载完类之后,在堆内存中,就产生了一个Class类型的对象(一个类只有一个Class对象)
 *  这个对象就包含了完整的类的结构信息.我们可以通过这个对象看到类的结构.这个对象就
 *  像一面镜子,透过这面镜子看到类的结构,所以我们形象称之为:反射
 */

/**
 * 测试java.lang.Class对象的获取方式
 */
public class Demo01 {
    public static void main(String[] args) {
        String path="reflectionbean.User";
        try {
            Class clazz=Class.forName(path);
            //对象是表示或封装一些数据,一个类被加载后,JVM会创建一个对应该类的Class对象,类的整个结构信息会放到对应的Class对象中
            //这个Class对象就像一面镜子一样,通过这面镜子我们可以看到对应类的全部信息
            System.out.println(clazz.hashCode());
            Class strClazz=String.class;
            Class strClazz2=path.getClass();
            System.out.println(strClazz);
            System.out.println(strClazz2);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}
